package com.j.lemon.learn.thread.collectionNotSafe;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * @Author lijunjun
 * @Date 2019-04-17 16:36
 * @Description ArrayList不安全的例子，以及解决方法
 */
public class ArrayListNotSafeDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

//        使用vector，锁太重，性能差
//        List<String> list = new Vector<>();

//        使用集合工具类
//        List<String> list = Collections.synchronizedList(new ArrayList<>());

//        使用CopyOnWriteArrayList，内部使用Reentrantlock对add方法加锁
//        List<String> list = new CopyOnWriteArrayList<>();
        for (int i = 0; i < 30; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,6));
                System.out.println(list);
            },String.valueOf(i)).start();
        }

        //java.util.ConcurrentModificationException

    }
}
